home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ewl / ewl_text.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  13KB  |  368 lines

  1. #ifndef __EWL_TEXT__
  2. #define __EWL_TEXT__
  3.  
  4. /**
  5.  * @file ewl_text.h
  6.  * @defgroup Ewl_Text text: A text layout widget
  7.  * @brief Defines a class for text layout and formatting
  8.  *
  9.  * @{
  10.  */
  11.  
  12. /**
  13.  * @themekey /text/file
  14.  * @themekey /text/group
  15.  * @themekey /text/font
  16.  * @themekey /text/font_size
  17.  * @themekey /text/color/r
  18.  * @themekey /text/color/g
  19.  * @themekey /text/color/b
  20.  * @themekey /text/color/a
  21.  */
  22.  
  23. /**
  24.  * @def EWL_TEXT(text)
  25.  * Typecasts a pointer to an Ewl_Text pointer.
  26.  */
  27. #define EWL_TEXT(x) ((Ewl_Text *)x)
  28.  
  29. typedef struct Ewl_Text_Tree Ewl_Text_Tree;
  30. typedef struct Ewl_Text_Context Ewl_Text_Context;
  31. typedef struct Ewl_Text_Trigger Ewl_Text_Trigger;
  32.  
  33. /**
  34.  * Provides for layout of text as well as formatting portions of the text in
  35.  * different ways.
  36.  */
  37. typedef struct Ewl_Text Ewl_Text;
  38.  
  39. /**
  40.  * @struct Ewl_Text
  41.  * Inherits from the Ewl_Container class and extends it to provide text layout
  42.  * and formatting
  43.  */
  44. struct Ewl_Text
  45. {
  46.     Ewl_Container           container;      /**< Inherit from Ewl_Container */
  47.     Evas_Object        *textblock;      /**< The Evas_Object_Textblock */ 
  48.  
  49.     char             *text;          /**< The text itself */
  50.     unsigned int          length;      /**< The length of the text */
  51.     unsigned int          total_size;      /**< The total size we've alloc'd for text */
  52.     unsigned int          cursor_position; /**< The cursor position */
  53.  
  54.     struct
  55.     {
  56.         Ewl_Text_Tree   *tree;          /**< The formatting tree */
  57.         Ewl_Text_Tree     *current;      /**< The current formatting node */
  58.     } formatting;
  59.  
  60.     Ecore_List        *triggers;      /**< The list of triggers */
  61.     Ewl_Text_Trigger    *selection;      /**< The current selection */
  62.  
  63.     unsigned char         delete_count;      /**< Number of deletes */
  64.     unsigned char         in_select;      /**< Are we in select mode? */
  65.  
  66.     unsigned char         selectable;      /**< Is the text selectable? */
  67.     unsigned char         dirty;            /**< Does the text need layout? */
  68. };
  69.  
  70. Ewl_Widget     *ewl_text_new(void);
  71. int          ewl_text_init(Ewl_Text *t);
  72.  
  73. unsigned int     ewl_text_length_get(Ewl_Text *t);
  74.  
  75. void         ewl_text_index_geometry_map(Ewl_Text *t, unsigned int idx,
  76.                     int *x, int *y, int *w, int *h);
  77. unsigned int     ewl_text_coord_index_map(Ewl_Text *t, int x, int y);
  78.  
  79. char         *ewl_text_text_get(Ewl_Text *t);
  80. void         ewl_text_text_set(Ewl_Text *t, const char *text);
  81. void         ewl_text_clear(Ewl_Text *t);
  82.  
  83. void         ewl_text_text_prepend(Ewl_Text *t, const char *text);
  84. void         ewl_text_text_append(Ewl_Text *t, const char *text);
  85. void         ewl_text_text_insert(Ewl_Text *t, const char *text, 
  86.                             unsigned int idx);
  87. void         ewl_text_text_delete(Ewl_Text *t, unsigned int length);
  88.  
  89. void         ewl_text_selectable_set(Ewl_Text *t, unsigned int selectable);
  90. unsigned int     ewl_text_selectable_get(Ewl_Text *t);
  91.  
  92. char         *ewl_text_selection_text_get(Ewl_Text *t);
  93. unsigned int      ewl_text_has_selection(Ewl_Text *t);
  94. Ewl_Text_Trigger *ewl_text_selection_get(Ewl_Text *t);
  95.  
  96. void         ewl_text_cursor_position_set(Ewl_Text *t, unsigned int pos);
  97. unsigned int     ewl_text_cursor_position_get(Ewl_Text *t);
  98.  
  99. unsigned int     ewl_text_cursor_position_line_up_get(Ewl_Text *t);
  100. unsigned int     ewl_text_cursor_position_line_down_get(Ewl_Text *t);
  101.  
  102. void         ewl_text_font_set(Ewl_Text *t, const char *font);
  103. void         ewl_text_font_apply(Ewl_Text *t, const char *font, 
  104.                             unsigned int length);
  105. char         *ewl_text_font_get(Ewl_Text *t, unsigned int idx);
  106.  
  107. void         ewl_text_font_size_set(Ewl_Text *t, unsigned int size);
  108. void         ewl_text_font_size_apply(Ewl_Text *t, unsigned int size,
  109.                             unsigned int length);
  110. unsigned int     ewl_text_font_size_get(Ewl_Text *t, unsigned int idx);
  111.  
  112. void         ewl_text_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  113.                         unsigned int b, unsigned int a);
  114. void         ewl_text_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  115.                         unsigned int b, unsigned int a,
  116.                         unsigned int length);
  117. void          ewl_text_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  118.                         unsigned int *b, unsigned int *a,
  119.                         unsigned int idx);
  120.  
  121. void         ewl_text_align_set(Ewl_Text *t, unsigned int align);
  122. void         ewl_text_align_apply(Ewl_Text *t, unsigned int align, 
  123.                             unsigned int length);
  124. unsigned int     ewl_text_align_get(Ewl_Text *t, unsigned int idx);
  125.  
  126. void         ewl_text_styles_set(Ewl_Text *t, unsigned int styles);
  127. void         ewl_text_styles_apply(Ewl_Text *t, unsigned int styles, 
  128.                             unsigned int length);
  129. unsigned int     ewl_text_styles_get(Ewl_Text *t, unsigned int idx);
  130.  
  131. void         ewl_text_style_add(Ewl_Text *t, Ewl_Text_Style sytle,
  132.                             unsigned int length);
  133. void         ewl_text_style_del(Ewl_Text *t, Ewl_Text_Style style,
  134.                             unsigned int length);
  135. void         ewl_text_style_invert(Ewl_Text *t, Ewl_Text_Style style,
  136.                             unsigned int length);
  137. unsigned int     ewl_text_style_has(Ewl_Text *t, Ewl_Text_Style style, 
  138.                             unsigned int idx);
  139.  
  140. void         ewl_text_wrap_set(Ewl_Text *t, unsigned int wrap);
  141. void         ewl_text_wrap_apply(Ewl_Text *t, unsigned int wrap, 
  142.                             unsigned int length);
  143. unsigned int     ewl_text_wrap_get(Ewl_Text *t, unsigned int idx);
  144.  
  145. void         ewl_text_bg_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  146.                         unsigned int b, unsigned int a);
  147. void         ewl_text_bg_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  148.                         unsigned int b, unsigned int a,
  149.                         unsigned int length);
  150. void         ewl_text_bg_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  151.                         unsigned int *b, unsigned int *a,
  152.                         unsigned int idx);
  153.  
  154. void         ewl_text_glow_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  155.                         unsigned int b, unsigned int a);
  156. void         ewl_text_glow_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  157.                             unsigned int b, unsigned int a,
  158.                             unsigned int length);
  159. void         ewl_text_glow_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  160.                             unsigned int *b, unsigned int *a,
  161.                             unsigned int idx);
  162.  
  163. void         ewl_text_outline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  164.                             unsigned int b, unsigned int a);
  165. void         ewl_text_outline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  166.                             unsigned int b, unsigned int a,
  167.                             unsigned int length);
  168. void         ewl_text_outline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  169.                             unsigned int *b, unsigned int *a,
  170.                             unsigned int idx);
  171.  
  172. void         ewl_text_shadow_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  173.                             unsigned int b, unsigned int a);
  174. void         ewl_text_shadow_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  175.                             unsigned int b, unsigned int a,
  176.                             unsigned int length);
  177. void           ewl_text_shadow_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  178.                             unsigned int *b, unsigned int *a,
  179.                             unsigned int idx);
  180.  
  181. void         ewl_text_strikethrough_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  182.                             unsigned int b, unsigned int a);
  183. void         ewl_text_strikethrough_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  184.                             unsigned int b, unsigned int a,
  185.                             unsigned int length);
  186. void         ewl_text_strikethrough_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  187.                             unsigned int *b, unsigned int *a,
  188.                             unsigned int idx);
  189.  
  190. void         ewl_text_underline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  191.                             unsigned int b, unsigned int a);
  192. void         ewl_text_underline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  193.                             unsigned int b, unsigned int a,
  194.                             unsigned int length);
  195. void         ewl_text_underline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  196.                             unsigned int *b, unsigned int *a,
  197.                             unsigned int idx);
  198.  
  199. void         ewl_text_double_underline_color_set(Ewl_Text *t, unsigned int r, unsigned int g,
  200.                             unsigned int b, unsigned int a);
  201. void         ewl_text_double_underline_color_apply(Ewl_Text *t, unsigned int r, unsigned int g,
  202.                             unsigned int b, unsigned int a,
  203.                             unsigned int length);
  204. void          ewl_text_double_underline_color_get(Ewl_Text *t, unsigned int *r, unsigned int *g,
  205.                             unsigned int *b, unsigned int *a,
  206.                             unsigned int idx);
  207.  
  208. /*
  209.  * Trigger stuf
  210.  */
  211. struct Ewl_Text_Trigger
  212. {
  213.     Ewl_Widget         widget;    /**< Inherit from widget */
  214.     Ewl_Text_Trigger_Type      type;        /**< Trigger type */
  215.     unsigned int          pos;        /**< Trigger start position */
  216.     unsigned int          len;        /**< Trigger length */
  217.     unsigned int         base;        /**< Used for the selection. Start position */
  218.  
  219.     Ewl_Text        *text_parent;    /**< The parent text area */
  220.     Ecore_List        *areas;        /**< The list of objects making up the trigger */
  221. };
  222.  
  223. #define EWL_TEXT_TRIGGER(trigger) ((Ewl_Text_Trigger *) trigger)
  224.  
  225. Ewl_Text_Trigger *ewl_text_trigger_new(Ewl_Text_Trigger_Type type);
  226. int          ewl_text_trigger_init(Ewl_Text_Trigger *trigger, 
  227.                     Ewl_Text_Trigger_Type type);
  228.  
  229. Ewl_Text_Trigger_Type ewl_text_trigger_type_get(Ewl_Text_Trigger *t);
  230.  
  231. void          ewl_text_trigger_start_pos_set(Ewl_Text_Trigger *t, 
  232.                             unsigned int pos);
  233. unsigned int      ewl_text_trigger_start_pos_get(Ewl_Text_Trigger *t);
  234.  
  235. void          ewl_text_trigger_base_set(Ewl_Text_Trigger *t, 
  236.                             unsigned int pos);
  237. unsigned int      ewl_text_trigger_base_get(Ewl_Text_Trigger *t);
  238.  
  239. void          ewl_text_trigger_length_set(Ewl_Text_Trigger *t, 
  240.                             unsigned int len);
  241. unsigned int      ewl_text_trigger_length_get(Ewl_Text_Trigger *t);
  242.  
  243. /*
  244.  * Internal stuff
  245.  */
  246. void ewl_text_triggers_configure(Ewl_Text *t);
  247. void ewl_text_triggers_realize(Ewl_Text *t);
  248. void ewl_text_triggers_unrealize(Ewl_Text *t);
  249. void ewl_text_triggers_show(Ewl_Text *t);
  250. void ewl_text_triggers_hide(Ewl_Text *t);
  251.  
  252. void ewl_text_cb_configure(Ewl_Widget *w, void *ev, void *data);
  253. void ewl_text_cb_reveal(Ewl_Widget *w, void *ev, void *data);
  254. void ewl_text_cb_obscure(Ewl_Widget *w, void *ev, void *data);
  255. void ewl_text_cb_show(Ewl_Widget *w, void *ev, void *data);
  256. void ewl_text_cb_hide(Ewl_Widget *w, void *ev, void *data);
  257. void ewl_text_cb_destroy(Ewl_Widget *w, void *ev, void *data);
  258. void ewl_text_cb_mouse_down(Ewl_Widget *w, void *ev, void *data);
  259. void ewl_text_cb_mouse_up(Ewl_Widget *w, void *ev, void *data);
  260. void ewl_text_cb_mouse_move(Ewl_Widget *w, void *ev, void *data);
  261. void ewl_text_cb_resize(Ewl_Widget *w, void *ev, void *data);
  262.  
  263. void ewl_text_cb_child_add(Ewl_Container *c, Ewl_Widget *w);
  264. void ewl_text_cb_child_del(Ewl_Container *c, Ewl_Widget *w);
  265.  
  266. void ewl_text_trigger_cb_destroy(Ewl_Widget *w, void *ev, void *data);
  267. void ewl_text_trigger_cb_mouse_in(Ewl_Widget *w, void *ev, void *data);
  268. void ewl_text_trigger_cb_mouse_out(Ewl_Widget *w, void *ev, void *data);
  269. void ewl_text_trigger_cb_mouse_up(Ewl_Widget *w, void *ev, void *data);
  270. void ewl_text_trigger_cb_mouse_down(Ewl_Widget *w, void *ev, void *data);
  271.  
  272. /*
  273.  * Ewl_Text_Context stuff
  274.  */
  275. struct Ewl_Text_Context
  276. {
  277.     char *font;
  278.     unsigned int styles;
  279.     unsigned int align;
  280.     unsigned int wrap;
  281.     char size;
  282.     Ewl_Color_Set color;
  283.  
  284.     struct
  285.     {
  286.         Ewl_Color_Set bg;
  287.         Ewl_Color_Set glow;
  288.         Ewl_Color_Set outline;
  289.         Ewl_Color_Set shadow;
  290.         Ewl_Color_Set strikethrough;
  291.         Ewl_Color_Set underline;
  292.         Ewl_Color_Set double_underline;
  293.     } style_colors;
  294.  
  295.     unsigned int ref_count;
  296. };
  297.  
  298. void ewl_text_context_init(void);
  299. void ewl_text_context_shutdown(void);
  300.  
  301. Ewl_Text_Context *ewl_text_context_new(void);
  302.  
  303. void ewl_text_context_acquire(Ewl_Text_Context *tx);
  304. void ewl_text_context_release(Ewl_Text_Context *tx);
  305.  
  306. int ewl_text_context_compare(Ewl_Text_Context *a, Ewl_Text_Context *b);
  307. Ewl_Text_Context *ewl_text_context_dup(Ewl_Text_Context *old);
  308.  
  309. /*
  310.  * Ewl_Text_Tree stuff
  311.  */
  312. struct Ewl_Text_Tree
  313. {
  314.     Ewl_Text_Tree *parent;
  315.  
  316.     unsigned int length;
  317.     Ecore_List *children;
  318.     Ewl_Text_Context *tx;
  319. };
  320.  
  321. Ewl_Text_Tree *ewl_text_tree_new(void);
  322. void ewl_text_tree_free(Ewl_Text_Tree *tree);
  323. void ewl_text_tree_condense(Ewl_Text_Tree *tree);
  324. void ewl_text_tree_dump(Ewl_Text_Tree *tree, const char *indent);
  325.  
  326. Ewl_Text_Tree *ewl_text_tree_node_get(Ewl_Text_Tree *tree, unsigned int idx, 
  327.                     unsigned int inclusive);
  328. void ewl_text_tree_current_node_set(Ewl_Text *t, Ewl_Text_Tree *current);
  329. void ewl_text_tree_insert(Ewl_Text *t, unsigned int idx, unsigned int len);
  330. void ewl_text_tree_delete(Ewl_Text *t, unsigned int idx, unsigned int len);
  331.  
  332. Ewl_Text_Context *ewl_text_tree_context_get(Ewl_Text_Tree *tree, 
  333.                             unsigned int idx);
  334. void ewl_text_tree_context_set(Ewl_Text *t, unsigned int context_mask,
  335.                                                     Ewl_Text_Context *tx);
  336. void ewl_text_tree_context_apply(Ewl_Text *t, unsigned int context_mask,
  337.                                     Ewl_Text_Context *tx, unsigned int idx,
  338.                                             unsigned int len);
  339. void ewl_text_tree_context_style_apply(Ewl_Text *t, Ewl_Text_Style style,
  340.                                         unsigned int idx, unsigned int len,
  341.                             unsigned int invert);
  342. void ewl_text_tree_context_style_remove(Ewl_Text *t, Ewl_Text_Style style,
  343.                                         unsigned int idx, unsigned int len);
  344.  
  345. /*
  346.  * Ewl_Text_Trigger_Area stuff
  347.  */
  348. typedef struct Ewl_Text_Trigger_Area Ewl_Text_Trigger_Area;
  349.  
  350. #define EWL_TEXT_TRIGGER_AREA(area) ((Ewl_Text_Trigger_Area *) area)
  351.  
  352. struct Ewl_Text_Trigger_Area
  353. {
  354.     Ewl_Widget    widget;
  355.     unsigned int    deleted;
  356. };
  357.  
  358. Ewl_Widget *ewl_text_trigger_area_new(Ewl_Text_Trigger_Type type);
  359. int ewl_text_trigger_area_init(Ewl_Text_Trigger_Area *area,
  360.                 Ewl_Text_Trigger_Type type);
  361.  
  362. /**
  363.  * @}
  364.  */
  365.  
  366. #endif /* __EWL_TEXT_H__ */
  367.  
  368.